package com.sqlcheck.service;

import com.sqlcheck.dto.git.GitProjectInfo;
import com.sqlcheck.dto.git.GitRepositoryInfo;

import java.util.List;

/**
 * GitLab API服务接口
 * 
 */
public interface GitLabApiService extends GitApiService {

    /**
     * 获取用户的GitLab项目列表
     * 
     * @param accessToken GitLab访问令牌
     * @param page        页码（从1开始）
     * @param perPage     每页项目数量
     * @return 项目列表
     */
    List<GitProjectInfo> getUserProjects(String accessToken, int page, int perPage);

    /**
     * 根据项目URL获取GitLab项目信息
     * 
     * @param accessToken GitLab访问令牌
     * @param projectUrl  项目URL
     * @return 项目信息，如果获取失败返回null
     */
    GitProjectInfo getProjectByUrl(String accessToken, String projectUrl);

    /**
     * 获取GitLab仓库信息（兼容性方法）
     * 
     * @param accessToken GitLab访问令牌
     * @param projectId   项目ID
     * @return 仓库信息，如果获取失败返回null
     */
    GitRepositoryInfo getRepositoryInfo(String accessToken, Long projectId);

    /**
     * 验证GitLab项目访问权限
     * 
     * @param accessToken GitLab访问令牌
     * @param projectUrl  项目URL
     * @return 是否有访问权限
     */
    boolean validateProjectAccess(String accessToken, String projectUrl);

    /**
     * 获取GitLab项目默认分支（兼容性方法）
     * 
     * @param accessToken GitLab访问令牌
     * @param projectId   项目ID
     * @return 默认分支名
     */
    String getDefaultBranch(String accessToken, Long projectId);

    /**
     * 获取GitLab项目分支列表（兼容性方法）
     * 
     * @param accessToken GitLab访问令牌
     * @param projectId   项目ID
     * @return 分支列表
     */
    List<String> getProjectBranches(String accessToken, Long projectId);
}